home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 10, No. 01 (1989-01)(MicroSPARC)(Side A)[a].zip / Nibble Volume 10, No. 01 (1989-01)(MicroSPARC)(Side A)[a].po / MEMORY.PEEKER.S < prev    next >
Text File  |  1996-12-24  |  29KB  |  430 lines

  1. 0001      1800              *********************************** 
  2. 0002      1800              *                                 * 
  3. 0003      1800              *          MEMORY PEEKER          * 
  4. 0004      1800              *  interpreted by Sandy Mossberg  * 
  5. 0005      1800              *                                 * 
  6. 0006      1800              *       Copyright (C) 1988        * 
  7. 0007      1800              *       by MicroSPARC, Inc.       * 
  8. 0008      1800              *       Concord, MA  01742        * 
  9. 0009      1800              *                                 * 
  10. 0010      1800              *********************************** 
  11. 0011      1800               
  12. 0012      1800              ; Zero Page Equates: 
  13. 0013      1800               
  14. 0014      1800              BytConvRef GEQU     $80              ;ASCII conversion base point 
  15. 0015      1800              LinCounter GEQU     $80              ;line output counter (W) 
  16. 0016      1800              BlkHandle  GEQU     $82              ;handle to memory block (L) 
  17. 0017      1800              BlkRecord  GEQU     $85              ;start of block record data 
  18. 0018      1800              BlkSize    GEQU     $8D              ;size of memory block (L) 
  19. 0019      1800              FwdLinkPtr GEQU     $95              ;ptr to next block record (L) 
  20. 0020      1800              CurrFreCnt GEQU     $99              ;current free memory (L) 
  21. 0021      1800              TotFreCnt  GEQU     $9D              ;total free memory (L) 
  22. 0022      1800              LinString  GEQU     $A1              ;start of line data string 
  23. 0023      1800              ;                                    ; ($A1=length, $A2-->=text) 
  24. 0024      1800               
  25. 0025      1800              ;          ORG      $FF1800          ;ROM code in bank $FF 
  26. 0026      1800               
  27. 0027      1800              MP_Code    START 
  28. 0028      1800               
  29. 0029      1800              ***************************************************************** 
  30. 0030      1800              * 
  31. 0031      1800              * CDA Installation Code: 
  32. 0032      1800              * 
  33. 0033      1800              ***************************************************************** 
  34. 0034      1800               
  35. 0035      1800 C2 30        MP_Install REP      #%00110000       ;clear m,x flags 
  36. 0036      1802                         LONGA    ON               ; 16-bit accum/memory 
  37. 0037      1802                         LONGI    ON               ; 16-bit index 
  38. 0038      1802 F4 FF 00                PEA      MP_Handle|-16    ;handle to CDA header 
  39. 0039      1805 F4 91 1A                PEA      MP_Handle        ; ($FF1A91) 
  40. 0040      1808 A2 05 0F                LDX      #$0F05           ;InstallCDA 
  41. 0041      180B 22 00 00 E1             JSL      $E10000 
  42. 0042      180F 6B                      RTL 
  43. 0043      1810               
  44. 0044      1810              ***************************************************************** 
  45. 0045      1810              * 
  46. 0046      1810              * CDA Code: 
  47. 0047      1810              * 
  48. 0048      1810              ***************************************************************** 
  49. 0049      1810              ; 
  50. 0050      1810              ; Initialize 
  51. 0051      1810              ; 
  52. 0052      1810              ; Save current output configuration on stack: 
  53. 0053      1810               
  54. 0054      1810 F4 00 00     MP_Start   PEA      $0000            ;space for output device code 
  55. 0055      1813 F4 00 00                PEA      $0000            ;space for output slot/vector 
  56. 0056      1816 F4 00 00                PEA      $0000 
  57. 0057      1819 A2 0C 13                LDX      #$130C           ;GetOutputDevice 
  58. 0058      181C 22 00 00 E1             JSR      $E10000          ; (leave on stack) 
  59. 0059      1820               
  60. 0060      1820 F4 00 00                PEA      $0000            ;space for output AND mask 
  61. 0061      1823 F4 00 00                PEA      $0000            ;space for output OR mask 
  62. 0062      1826 A2 0C 0D                LDX      #$0D0C           ;GetOutGlobals 
  63. 0063      1829 22 00 00 E1             JSR      $E10000          ; (leave on stack) 
  64. 0064      182D               
  65. 0065      182D              ; Set slot 3 text output (negative ASCII): 
  66. 0066      182D               
  67. 0067      182D F4 FF 00                PEA      $00FF            ;AND mask (no change) 
  68. 0068      1830 F4 80 00                PEA      $0080            ;OR mask (set high bit) 
  69. 0069      1833 A2 0C 0A                LDX      #$0A0C           ;SetOutGlobals 
  70. 0070      1836 22 00 00 E1             JSR      $E10000 
  71. 0071      183A               
  72. 0072      183A F4 00 00                PEA      $0000            ;BASIC device type 
  73. 0073      183D F4 00 00                PEA      $0000            ;input from slot 3 
  74. 0074      1840 F4 03 00                PEA      $0003 
  75. 0075      1843 A2 0C 10                LDX      #$100C           ;SetOutputDevice 
  76. 0076      1846 22 00 00 E1             JSR      $E10000 
  77. 0077      184A               
  78. 0078      184A F4 00 00                PEA      $0000            ;init input device 
  79. 0079      184D A2 0C 15                LDX      #$150C           ;InitTextDev 
  80. 0080      1850 22 00 00 E1             JSR      $E10000 
  81. 0081      1854               
  82. 0082      1854 F4 01 00                PEA      $0001            ;init output device 
  83. 0083      1857 A2 0C 15                LDX      #$150C           ;InitTextDev 
  84. 0084      185A 22 00 00 E1             JSR      $E10000 
  85. 0085      185E              ;................................................................ 
  86. 0086      185E              ; 
  87. 0087      185E              ; Display menu: 
  88. 0088      185E              ; 
  89. 0089      185E C2 30        ShowMenu   REP      #%00110000       ;clear m,x flags 
  90. 0090      1860                         LONGA    ON               ; 16-bit accum/memory 
  91. 0091      1860                         LONGI    ON               ; 16-bit index 
  92. 0092      1860 F4 FF 00                PEA      MenuText|-16     ;pointer to text string 
  93. 0093      1863 F4 E3 19                PEA      MenuText         ; ($FF19E3) 
  94. 0094      1866 A2 0C 1A                LDX      #$1A0C           ;WriteLine 
  95. 0095      1869 22 00 00 E1             JSR      $E10000 
  96. 0096      186D              ;................................................................ 
  97. 0097      186D              ; 
  98. 0098      186D              ; Get user command and route valid requests: 
  99. 0099      186D              ; 
  100. 0100      186D                         MSB      OFF              ;generate pos ASCII chars 
  101. 0101      186D               
  102. 0102      186D F4 00 00     GetCommand PEA      $0000            ;space for ASCII char code 
  103. 0103      1870 F4 00 00                PEA      $0000            ;no echo 
  104. 0104      1873 A2 0C 22                LDX      #$220C           ;ReadChar 
  105. 0105      1876 22 00 00 E1             JSR      $E10000 
  106. 0106      187A 68                      PLA                       ;retrieve input 
  107. 0107      187B 29 7F 00                AND      #$007F           ;convert to positive ASCII 
  108. 0108      187E C9 61 00                CMP      #'a' 
  109. 0109      1881 90 03                   BCC      GC1              ;upper case found 
  110. 0110      1883 49 20 00                EOR      #$0020           ;shift low case to up case 
  111. 0111      1886 C9 55 00     GC1        CMP      #'U' 
  112. 0112      1889 F0 20                   BEQ      DoUSED           ;Used list requested 
  113. 0113      188B C9 50 00                CMP      #'P' 
  114. 0114      188E F0 20                   BEQ      DoPURGE          ;Purge list requested 
  115. 0115      1890 C9 46 00                CMP      #'F' 
  116. 0116      1893 F0 20                   BEQ      DoFREE           ;Free list requested 
  117. 0117      1895 C9 51 00                CMP      #'Q' 
  118. 0118      1898 D0 D3                   BNE      GetCommand       ;invalid char so get another 
  119. 0119      189A              ;................................................................ 
  120. 0120      189A              ; 
  121. 0121      189A              ; QUIT handler: 
  122. 0122      189A              ; 
  123. 0123      189A C2 30                   REP      #%00110000       ;clear m,x flags 
  124. 0124      189C                         LONGA    ON               ; 16-bit accum/memory 
  125. 0125      189C                         LONGI    ON               ; 16-bit index 
  126. 0126      189C A2 0C 0A                LDX      #$0A0C           ;SetOutGlobals 
  127. 0127      189F 22 00 00 E1             JSR      $E10000          ; (on stack) 
  128. 0128      18A3 A2 0C 10                LDX      #$100C           ;SetOutputDevice 
  129. 0129      18A6 22 00 00 E1             JSR      $E10000          ; (on stack) 
  130. 0130      18AA 6B           MP_Shut    RTL 
  131. 0131      18AB              ;................................................................ 
  132. 0132      18AB              ; 
  133. 0133      18AB              ; USED list handler: 
  134. 0134      18AB              ; 
  135. 0135      18AB A2 00 00     DoUSED     LDX      #$0000           ;index used block records 
  136. 0136      18AE 80 0A                   BRA      DoList           ;to common list handler 
  137. 0137      18B0              ;................................................................ 
  138. 0138      18B0              ; 
  139. 0139      18B0              ; PURGE list handler: 
  140. 0140      18B0              ; 
  141. 0141      18B0 A2 04 00     DoPURGE    LDX      #$0004           ;index purged block records 
  142. 0142      18B3 80 05                   BRA      DoList           ;to common list handler 
  143. 0143      18B5              ;................................................................ 
  144. 0144      18B5              ; 
  145. 0145      18B5              ; FREE list handler: 
  146. 0146      18B5              ; 
  147. 0147      18B5 A2 08 00     DoFREE     LDX      #$0008           ;index free block records 
  148. 0148      18B8 80 00                   BRA      DoList           ;[superfluous instruction] 
  149. 0149      18BA              ;................................................................ 
  150. 0150      18BA              ; 
  151. 0151      18BA              ; Common list handler: 
  152. 0152      18BA              ; 
  153. 0153      18BA              ; Point at first block record in selected chain: 
  154. 0154      18BA               
  155. 0155      18BA 08           DoList     PHP                       ;save entry status 
  156. 0156      18BB 78                      SEI                       ;disable interrupts 
  157. 0157      18BC BF 00 16 E1             LDA      $E11600,X        ;point at selected 
  158. 0158      18C0 85 82                   STA      BlkHandle        ; block records 
  159. 0159      18C2 BF 02 16 E1             LDA      $E11602,X 
  160. 0160      18C6 85 84                   STA      BlkHandle+2 
  161. 0161      18C8               
  162. 0162      18C8              ; Zero counters: 
  163. 0163      18C8               
  164. 0164      18C8 64 80                   STZ      LinCounter 
  165. 0165      18CA 64 9D                   STZ      TotFreCnt 
  166. 0166      18CC 64 9F                   STZ      TotFreCnt+2 
  167. 0167      18CE               
  168. 0168      18CE              ; Print headers for block record data: 
  169. 0169      18CE               
  170. 0170      18CE F4 FF 00                PEA      DataText|-16     ;pointer to text string 
  171. 0171      18D1 F4 16 1A                PEA      DataText         ; ($FF1A16) 
  172. 0172      18D4 A2 0C 1A                LDX      #$1A0C           ;WriteLine 
  173. 0173      18D7 22 00 00 E1             JSR      $E10000 
  174. 0174      18DB E2 30                   SEP      #%00110000       ;set m,x flags 
  175. 0175      18DD                         LONGA    OFF              ; 8-bit accum/memory 
  176. 0176      18DD                         LONGI    OFF              ; 8-bit index 
  177. 0177      18DD               
  178. 0178      18DD              ; Check end of block record chain: 
  179. 0179      18DD               
  180. 0180      18DD A5 82        NextRecord LDA      BlkHandle 
  181. 0181      18DF 05 83                   ORA      BlkHandle+1 
  182. 0182      18E1 05 84                   ORA      BlkHandle+2 
  183. 0183      18E3 D0 1F                   BNE      DoString         ;another record in chain 
  184. 0184      18E5               
  185. 0185      18E5              ; Check free memory count when block record chain completed: 
  186. 0186      18E5               
  187. 0187      18E5 A5 9D                   LDA      TotFreCnt 
  188. 0188      18E7 05 9E                   ORA      TotFreCnt+1 
  189. 0189      18E9 05 A0                   ORA      TotFreCnt+3      ;[should be ORA TotFreCnt+2] 
  190. 0190      18EB F0 13                   BEQ      ListDone         ;don't print zero free count 
  191. 0191      18ED               
  192. 0192      18ED              ; Setup and print total free memory count: 
  193. 0193      18ED               
  194. 0194      18ED A2 3C                   LDX      #$3C             ;put text in line buffer 
  195. 0195      18EF              ;                                    ;[LDA #$35 more logical] 
  196. 0196      18EF BF 52 1A FF  PrtTotFre  LDA      >TotFreText,X    ;get char at $FF1A52,X 
  197. 0197      18F3 95 A1                   STA      LinString,X      ;put into line string buffer 
  198. 0198      18F5 CA                      DEX 
  199. 0199      18F6 10 F7                   BPL      PrtTotFre        ;get another char 
  200. 0200      18F8 A2 1D                   LDX      #$1D             ;"Total Free Memory" 
  201. 0201      18FA 20 9A 19                JSR      Conv3Byt         ; at $9D-$9F 
  202. 0202      18FD 20 CF 19                JSR      PrintLine        ;print the line 
  203. 0203      1900               
  204. 0204      1900              ; List completed: 
  205. 0205      1900               
  206. 0206      1900 28           ListDone   PLP                       ;restore entry status 
  207. 0207      1901 4C 5E 18                JMP      ShowMenu         ;get another menu selection 
  208. 0208      1904              ;................................................................ 
  209. 0209      1904              ; 
  210. 0210      1904              ; Prepare and print string containing data from one block record: 
  211. 0211      1904              ; 
  212. 0212      1904              ; Transfer 20-byte block record to $85-$98: 
  213. 0213      1904               
  214. 0214      1904 64 A1        DoString   STZ      LinString        ;zero length byte of string 
  215. 0215      1906 A0 13                   LDY      #$13             ;index 19(+1) bytes 
  216. 0216      1908 B7 82        TfrBlkRec  LDA      [BlkHandle],Y    ;FROM block record 
  217. 0217      190A BB                      TYX 
  218. 0218      190B 95 85                   STA      BlkRecord,X      ;TO zero page 
  219. 0219      190D 88                      DEY 
  220. 0220      190E 10 F8                   BPL      TfrBlkRec        ;back for more 
  221. 0221      1910               
  222. 0222      1910              ; Zero free count bytes for this segment: 
  223. 0223      1910               
  224. 0224      1910 C2 20                   REP      #%00100000       ;clear m flag 
  225. 0225      1912                         LONGA    ON               ; 16-bit accum/memory 
  226. 0226      1912 64 99                   STZ      CurrFreCnt 
  227. 0227      1914 64 9B                   STZ      CurrFreCnt+2 
  228. 0228      1916               
  229. 0229      1916              ; If at end of block record chain, do not calculate free space: 
  230. 0230      1916               
  231. 0231      1916 A5 95                   LDA      FwdLinkPtr 
  232. 0232      1918 05 97                   ORA      FwdLinkPtr+2 
  233. 0233      191A F0 2F                   BEQ      SetString        ;forward link = 0 
  234. 0234      191C A0 02                   LDY      #$02 
  235. 0235      191E A7 95                   LDA      [FwdLinkPtr] 
  236. 0236      1920 17 95                   ORA      [FwdLinkPtr],Y 
  237. 0237      1922 F0 27                   BEQ      SetString        ;next master ptr = 0 
  238. 0238      1924               
  239. 0239      1924              ; Calculate current free space: 
  240. 0240      1924               
  241. 0241      1924              ;--> Calculate area between this memory segment and next segment: 
  242. 0242      1924               
  243. 0243      1924 A7 95                   LDA      [FwdLinkPtr]     ;Start of next segment (lo) 
  244. 0244      1926 38                      SEC                       ; minus 
  245. 0245      1927 E7 82                   SBC      [BlkHandle]      ; start of this segment (lo) 
  246. 0246      1929 85 99                   STA      CurrFreCnt       ; = intersegmental size (lo) 
  247. 0247      192B B7 95                   LDA      [FwdLinkPtr],Y   ;Start of next seg (hi) minus 
  248. 0248      192D F7 82                   SBC      [BlkHandle],Y    ; start of this segment (hi) 
  249. 0249      192F 85 9B                   STA      CurrFreCnt+2     ; = intersegmental size (hi) 
  250. 0250      1931               
  251. 0251      1931              ;--> Free space = difference between above value and block size: 
  252. 0252      1931               
  253. 0253      1931 A5 99                   LDA      CurrFreCnt       ;Intersegmental size (lo) 
  254. 0254      1933 38                      SEC                       ; minus 
  255. 0255      1934 E5 8D                   SBC      BlkSize          ; size of current block (lo) 
  256. 0256      1936 85 99                   STA      CurrFreCnt       ; = free space (lo) 
  257. 0257      1938 A5 9B                   LDA      CurrFreCnt+2     ;Interseg size (hi) minus 
  258. 0258      193A E5 8F                   SBC      BlkSize+2        ; size of current block (hi) 
  259. 0259      193C 85 9B                   STA      CurrFreCnt+2     ; = free space (hi) 
  260. 0260      193E               
  261. 0261      193E              ; Add current free space to total free space: 
  262. 0262      193E               
  263. 0263      193E A5 99                   LDA      CurrFreCnt       ;current free space (lo) 
  264. 0264      1940 18                      CLC                       ; plus 
  265. 0265      1941 65 9D                   ADC      TotFreCnt        ; total free space (lo) 
  266. 0266      1943 85 9D                   STA      TotFreCnt        ; = new total free space (lo) 
  267. 0267      1945 A5 9B                   LDA      CurrFreCnt+2     ;current free space (hi) plus 
  268. 0268      1947 65 9F                   ADC      TotFreCnt+2      ; total free space (hi) 
  269. 0269      1949 85 9F                   STA      TotFreCnt+2      ; = new total free space (hi) 
  270. 0270      194B               
  271. 0271      194B              ; Convert zero page hex data to ASCII line string: 
  272. 0272      194B               
  273. 0273      194B E6 80        SetString  INC      LinCounter       ;bump block record count 
  274. 0274      194D E2 30                   SEP      #%00110000       ;set m,x flags 
  275. 0275      194F                         LONGA    OFF              ; 8-bit accum/memory 
  276. 0276      194F                         LONGI    OFF              ; 8-bit index 
  277. 0277      194F A2 00                   LDX      #$00             ;line count ("#") 
  278. 0278      1951 20 A1 19                JSR      Conv2Byt         ; at $80-$81 
  279. 0279      1954 A2 02                   LDX      #$02             ;handle ("Handle") 
  280. 0280      1956 20 9A 19                JSR      Conv3Byt         ; at $82-$84 
  281. 0281      1959 A2 05                   LDX      #$05             ;master pointer ("Addr") 
  282. 0282      195B 20 9A 19                JSR      Conv3Byt         ; at $85-$87 
  283. 0283      195E A2 09                   LDX      #$09             ;attributes ("Attr") 
  284. 0284      1960 20 A1 19                JSR      Conv2Byt         ; at $89-$8A 
  285. 0285      1963 A2 0B                   LDX      #$0B             ;owner ID ("ID") 
  286. 0286      1965 20 A1 19                JSR      Conv2Byt         ; at $8B-$8C 
  287. 0287      1968 A2 0D                   LDX      #$0D             ;block size ("Size") 
  288. 0288      196A 20 93 19                JSR      Conv4Byt         ; at $8D-$90 
  289. 0289      196D A2 11                   LDX      #$11             ;backward link ("Prev") 
  290. 0290      196F 20 9A 19                JSR      Conv3Byt         ; at $91-$93 
  291. 0291      1972 A2 15                   LDX      #$15             ;forward link ("Next") 
  292. 0292      1974 20 9A 19                JSR      Conv3Byt         ; at $95-$97 
  293. 0293      1977 A5 99                   LDA      CurrFreCnt 
  294. 0294      1979 05 9A                   ORA      CurrFreCnt+1 
  295. 0295      197B 05 9B                   ORA      CurrFreCnt+2 
  296. 0296      197D F0 05                   BEQ      LineOut          ;free count = 0 so skip it 
  297. 0297      197F A2 19                   LDX      #$19             ;current free count ("Free") 
  298. 0298      1981 20 9A 19                JSR      Conv3Byt         ; at $99-$9B 
  299. 0299      1984               
  300. 0300      1984              ; Print line string (i.e. one line of data): 
  301. 0301      1984               
  302. 0302      1984 20 CF 19     LineOut    JSR      PrintLine 
  303. 0303      1987               
  304. 0304      1987              ; Set handle to next block: 
  305. 0305      1987               
  306. 0306      1987 A2 03                   LDX      #$03             ;transfer 4 bytes from 
  307. 0307      1989 B5 95        NextHandle LDA      FwdLinkPtr,X     ; forward link pointer 
  308. 0308      198B 95 82                   STA      BlkHandle,X      ; to zero page 
  309. 0309      198D CA                      DEX 
  310. 0310      198E 10 F9                   BPL      NextHandle 
  311. 0311      1990 4C DD 18                JMP      NextRecord       ;back for next block record 
  312. 0312      1993              ;................................................................ 
  313. 0313      1993              ; 
  314. 0314      1993              ; Convert 2-4 hex bytes to ASCII and place at end of line string: 
  315. 0315      1993              ; 
  316. 0316      1993 DA           Conv4Byt   PHX                       ;save X-reg 
  317. 0317      1994 B5 83                   LDA      BytConvRef+3,X   ;get 4th byte, convert to 
  318. 0318      1996 20 B1 19                JSR      SetStrByte       ; ASCII and add to string 
  319. 0319      1999 FA                      PLX                       ;restore X-reg 
  320. 0320      199A               
  321. 0321      199A DA           Conv3Byt   PHX                       ;save X-reg 
  322. 0322      199B B5 82                   LDA      BytConvRef+2,X   ;get 3rd byte, convert to 
  323. 0323      199D 20 B1 19                JSR      SetStrByte       ; ASCII and add to string 
  324. 0324      19A0 FA                      PLX                       ;restore X-reg 
  325. 0325      19A1               
  326. 0326      19A1 DA           Conv2Byt   PHX                       ;save X-reg 
  327. 0327      19A2 B5 81                   LDA      BytConvRef+1,X   ;get 2nd byte, convert to 
  328. 0328      19A4 20 B1 19                JSR      SetStrByte       ; ASCII and add to string 
  329. 0329      19A7 FA                      PLX                       ;restore X-reg 
  330. 0330      19A8               
  331. 0331      19A8 B5 80                   LDA      BytConvRef,X     ;get 1st byte, convert to 
  332. 0332      19AA 20 B1 19                JSR      SetStrByte       ; ASCII and add to string 
  333. 0333      19AD 20 CB 19                JSR      AddSpace         ;add space to line string 
  334. 0334      19B0 60                      RTS 
  335. 0335      19B1              ;................................................................ 
  336. 0336      19B1              ; 
  337. 0337      19B1              ; Place ASCII data at end of line string: 
  338. 0338      19B1              ; 
  339. 0339      19B1              ; Convert hex byte to ASCII: 
  340. 0340      19B1               
  341. 0341      19B1                         MSB      ON               ;generate neg ASCII chars 
  342. 0342      19B1               
  343. 0343      19B1 48           SetStrByte PHA                       ;save byte 
  344. 0344      19B2 4A                      LSR      A                ;isolate high order digit 
  345. 0345      19B3 4A                      LSR      A 
  346. 0346      19B4 4A                      LSR      A 
  347. 0347      19B5 4A                      LSR      A 
  348. 0348      19B6 20 BC 19                JSR      HexToAscii       ;convert hex digit to ASCII 
  349. 0349      19B9 68                      PLA                       ;restore byte 
  350. 0350      19BA 29 0F                   AND      #$0F             ;isolate low order digit 
  351. 0351      19BC               
  352. 0352      19BC              ; Convert hex digit to negative ASCII: 
  353. 0353      19BC               
  354. 0354      19BC 09 B0        HexToAscii ORA      #'0' 
  355. 0355      19BE C9 BA                   CMP      #'9'+1 
  356. 0356      19C0 90 02                   BCC      AddToStr         ;$01-$09 
  357. 0357      19C2 69 06                   ADC      #$06             ;$0A-$0F 
  358. 0358      19C4               
  359. 0359      19C4              ; Put character at end of line string: 
  360. 0360      19C4               
  361. 0361      19C4 A6 A1        AddToStr   LDX      LinString        ;get length of string 
  362. 0362      19C6 95 A2                   STA      LinString+1,X    ;put char at end of string 
  363. 0363      19C8 E6 A1                   INC      LinString        ;bump length of string 
  364. 0364      19CA 60                      RTS 
  365. 0365      19CB               
  366. 0366      19CB              ; Put space at end of line string: 
  367. 0367      19CB               
  368. 0368      19CB A9 A0        AddSpace   LDA      #' '             ;neg ASCII space 
  369. 0369      19CD 80 F5                   BRA      AddToStr 
  370. 0370      19CF               
  371. 0371      19CF              ;................................................................ 
  372. 0372      19CF              ; 
  373. 0373      19CF              ; Print one line of data (i.e. line string): 
  374. 0374      19CF              ; 
  375. 0375      19CF C2 30        PrintLine  REP      #%00110000       ;clear m,x flags 
  376. 0376      19D1                         LONGA    ON               ; 16-bit accum/memory 
  377. 0377      19D1                         LONGI    ON               ; 16-bit index 
  378. 0378      19D1 F4 00 00                PEA      LinString|-16    ;pointer to text string 
  379. 0379      19D4 F4 A1 00                PEA      LinString        ; ($A1) 
  380. 0380      19D7 A2 0C 1A                LDX      #$1A0C           ;WriteLine 
  381. 0381      19DA 22 00 00 E1             JSR      $E10000 
  382. 0382      19DE E2 30                   SEP      #%00110000       ;set m,x flags 
  383. 0383      19E0                         LONGA    OFF              ; 8-bit accum/memory 
  384. 0384      19E0                         LONGI    OFF              ; 8-bit index 
  385. 0385      19E0 64 A1                   STZ      LinString        ;zero leading length byte 
  386. 0386      19E2 60                      RTS 
  387. 0387      19E3              ;................................................................ 
  388. 0388      19E3              ; 
  389. 0389      19E3              ; Text: 
  390. 0390      19E3              ; 
  391. 0391      19E3 32           MenuText   DC       H'32'            ;length byte 
  392. 0392      19E4 D5 BD A0 D5             DC       C'U= Used list  P= Purge list  F= Free list  ' 
  393. 0393      1A0F D1 BD A0 D1             DC       C'Q= Quit' 
  394. 0394      1A16               
  395. 0395      1A16 3B           DataText   DC       H'3B'            ;length byte 
  396. 0396      1A17 8D 8D                   DC       H'8D 8D' 
  397. 0397      1A19 A3 A0 A0 A0             DC       C'#    Handle  Addr  Attr  ID    Size    ' 
  398. 0398      1A40 D0 F2 E5 F6             DC       C'Prev   Next   Free' 
  399. 0399      1A52               
  400. 0400      1A52 35           TotFreText DC       H'35'            ;length byte 
  401. 0401      1A53 8D                      DC       H'8D' 
  402. 0402      1A54 A0 A0 A0 A0             DC       34C' ' 
  403. 0403      1A76 D4 EF F4 E1             DC       C'Total Free Memory ' 
  404. 0404      1A88               
  405. 0405      1A88 BD A0 A0 A0             DC       C'=        '     ;used by PrtTotFre 
  406. 0406      1A91              ;                                    ;[superfluous] 
  407. 0407      1A91               
  408. 0408      1A91              ***************************************************************** 
  409. 0409      1A91              * 
  410. 0410      1A91              * Handle to CDA Header: 
  411. 0411      1A91              * 
  412. 0412      1A91              ***************************************************************** 
  413. 0413      1A91               
  414. 0414      1A91 95 1A FF 00  MP_Handle  DC       I4'MP_Header' 
  415. 0415      1A95               
  416. 0416      1A95              ***************************************************************** 
  417. 0417      1A95              * 
  418. 0418      1A95              * CDA Header: 
  419. 0419      1A95              * 
  420. 0420      1A95              ***************************************************************** 
  421. 0421      1A95               
  422. 0422      1A95                         MSB      OFF              ;generate pos ASCII chars 
  423. 0423      1A95               
  424. 0424      1A95 0D           MP_Header  DC       H'0D'            ;length byte 
  425. 0425      1A96 4D 65 6D 6F             DC       C'Memory Peeker' ;title 
  426. 0426      1AA3 10 18 FF 00             DC       I4'MP_Start'     ;startup entry 
  427. 0427      1AA7 AA 18 FF 00             DC       I4'MP_Shut'      ;shutdown entry 
  428. 0428      1AAB               
  429. 0429      1AAB                         END
  430.